package d12_homework.d3_thirdquestion;

import java.util.List;
import java.util.Random;

//1、实现Runnable接口,并重写run()方法
public class CJTask implements Runnable {


    private final List<String> awards;
    private Random r = new Random();

    public CJTask(List<String> awards) {
        this.awards = awards;
    }

    //2、声明线程要进行的事情
    @Override
    public void run() {
        //3、获取当前抽奖的组别
        String name = Thread.currentThread().getName();
        //7、由于要循环抽取,所以死循环
        //9、给出退出条件
      /*  if (awards.isEmpty()) {
            break;------------>不可以写在外面,可能出现的情况-->A线程判断还有一个奖品时,B线程
                                        在里面对集合进行了修改,导致集合变成了空,当B线程释放锁后,
                                        A线程还是会进去,这样子就会抛异常
        }*/

        while (true) {

            //9、给出退出条件
            if (awards.isEmpty()) {
                break;
            }
            //6、保证线程安全
            synchronized (awards) {

                //4、将抽出的奖品重,集合中抹除(奖品要随机-->创建一个随机数对象)
                String award = awards.remove(r.nextInt(awards.size()));

                //5、进行输出,哪个组别抽取了是什么
                System.out.println(name + "...抽出了一个: " + award);
            }
        }


    }
}
